package 真题;/**
 * @author： li
 * @date： 2022-01-19 19:39
 * @version 1.0
 */
/*【问题描述】
给定序列(a1,a2,… ,an)=(1,2,…. ,n)，即ai = i。
小蓝将对这个序列进行m次操作，每次可能是将at,a2,… ,aq降序排列，或者将aqi,aqi+1,…… ,an升序排列。
请求出操作完成后的序列。
【输入格式】
输入的第一行包含两个整数n, m，分别表示序列的长度和操作次数。
接下来m行描述对序列的操作，其中第i行包含两个整数 pi, qi表示操作类型和参数。当pi=0时，表示将a1,a2, … ,aqi降序排列;
当pi=1时，表示将aqi,aqi+1,……,an升序排列。
【输出格式】
输出一行，包含n个整数，相邻的整数之间使用一个空格分隔，表示操作完成后的序列。
【样例输入】
3 3
0 3
1 2
0 2
【样例输出】
3 l 2
【样例说明】
原数列为(1,2,3)。
第1步后为(3,2,1)。
第2步后为(3,1,2)。
第3步后为(3,1,2)。与第2步操作后相同，因为前两个数已经是降序了。
【评测用例规模与约定】
对于30%的评测用例，n,m ≤1000;
对于60%的评测用例，n,m ≤ 5000;
对于所有评测用例，1≤n,m ≤100000，0≤ pi≤1，1≤ qi ≤n。
 */
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;
public class 双向排序01_百分之30 {
    static Integer[] a=new Integer[(int) 1e5+5];
    static int n;
    static int last_sort;//记录上一次是哪种排序
    static int last_pos;
    static void up_sort(int up,int des){
        Arrays.sort(a,up,des+1);
//        for(int i=1;i<=n;i++)
//            System.out.print(a[i]+" ");
//        System.out.println(" ");
    }
    static void down_sort(int des){
        Arrays.sort(a, 1,des+1,Collections.reverseOrder());
//        for(int i=1;i<=n;i++)
//            System.out.print(a[i]+" ");
//        System.out.println(" ");
    }
    public static void main(String[] args) {
        Scanner sc =new Scanner(System.in);
        n=sc.nextInt();
        int m=sc.nextInt();
        int[][] step=new int[m+1][3];
        for(int i=1;i<=n;i++)
            a[i]=i;
        for(int i=1;i<=m;i++){
            step[i][1]=sc.nextInt();
            step[i][2]=sc.nextInt();
        }
//        for(int i=1;i<=m;i++){
//            System.out.print(step[i][1]+" "+step[i][2]);
//            System.out.println(" ");
//        }
        for(int i=1;i<=m;i++) {
            if(step[i][1]==0)
                down_sort(step[i][2]);
            else
                up_sort(step[i][2],n);
            }

        for(int i=1;i<=n;i++)
            System.out.print(a[i]+" ");
    }
}
